.equ PERSON_SIZE,76
.section .data
	str0:
		.string "%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n"
	str1:
		.string "%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n"
	str2:
		.string "名字"
	str3:
		.string "年龄"
	str4:
		.string "性别"
	str5:
		.string "电话"
	str6:
		.string "地址"
	str7:
		.string "暂无联系人\n"
.section .text
.global PrintContact
.type PrintContact,@function
PrintContact:
	nop
	push %rbp
	mov %rsp,%rbp
	subq $16,%rsp
#保存结构体地址到堆栈
	mov %rdi,-8(%rbp)	
#判断当前是否有联系人
	mov -8(%rbp),%rbx
	mov $0,%ecx
	cmp 12(%rbx),%ecx
	je 2f
#打印基本信息
	mov $0,%rax
	mov $str1,%rdi
	mov $str2,%rsi
	mov $str3,%rdx
	mov $str4,%rcx
	mov $str5,%r8
	mov $str6,%r9
	call printf
#获取目前通讯录大小
	movl $0,-12(%rbp)  #i=0
#for i=0;i<c->sz;i++
	jmp 1f
1:
	movl -12(%rbp),%ecx
	imull $PERSON_SIZE,%ecx #获取堆内存偏移量
	movq (%rbx),%rax  #获取堆内存首地址
	leaq 0(%rax,%rcx),%r11 #获取实际堆内存位置
#打印
	movq $str0,%rdi
	movq %r11,%rsi  #名字
	movl 20(%r11),%edx #年龄
	leaq 24(%r11),%rcx #性别	
	leaq 34(%r11),%r8  #电话
	leaq 46(%r11),%r9  #地址
	movq $0,%rax
	call printf
#i++
	incl -12(%rbp)
	movl -12(%rbp),%r10d
	cmpl 12(%rbx),%r10d  #判断i和c->sz的大小
	jb 1b
	leaveq
	retq
2:
	mov $0,%rax
	mov $str7,%rdi
	call printf
	leaveq 
	retq
